import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
#from statsmodels.formula.api  import ols
df=pd.read_excel("H:\VS Code\酒店预订系统\酒店预订数据.xlsx")
print ('数据维度',df.shape)



##类型转换
df['入住日期']=pd.to_datetime(df['入住日期'])
df['退房日期']=pd.to_datetime(df['退房日期'])
df['预定日期']=pd.to_datetime(df['预定日期'])
print ('数据前5行',df.head())
print("数据描述",df.describe())

##标记节假日
holiday=pd.to_datetime(['2016-10-1','2016-10-2','2016-10-3','2016-10-4','2016-10-5','2016-10-6','2016-10-7'])
df['是否节假日']=df['入住日期'].isin(holiday).astype(int)


#间夜单价影响因素分析（可视化）

##1.酒店的类型与价格相关性
df_hotel_type = df.groupby('酒店类型', as_index=False)['间夜单价'].mean()
print('酒店类型与酒店价格', df_hotel_type.head())
plt.figure(figsize=(20, 5), dpi=150)
plt.barh(df_hotel_type['酒店类型'], df_hotel_type['间夜单价'])
plt.ylabel('酒店类型')
plt.xlabel('间夜单价')
plt.title('酒店类型与酒店价格')
plt.yticks(range(len(df_hotel_type['酒店类型'])), df_hotel_type['酒店类型'])
plt.savefig('H:\VS Code\酒店预订系统\酒店类型与间夜单价.png')

##2.连锁属性与价格相关性
df_chain = df.groupby('是否连锁酒店', as_index=False)['间夜单价'].mean()
print('连锁属性与价格', df_chain.head())
plt.figure(figsize=(5,5), dpi=150)
plt.bar(df_chain['是否连锁酒店'], df_chain['间夜单价'], width=0.2)  # 调整柱子宽度
plt.xlabel('是否连锁酒店')
plt.ylabel('间夜单价')
plt.title('连锁属性与价格')
plt.xticks(range(len(df_chain['是否连锁酒店'])), df_chain['是否连锁酒店'])
plt.savefig('H:\VS Code\酒店预订系统\连锁属性与间夜单价.png')

##3.酒店评分与价格相关性
plt.figure(figsize=(10, 6))
sns.regplot(x="评分", y="间夜单价", data=df, scatter_kws={'alpha':0.3})
plt.title("评分与价格相关性")
plt.xlabel('评分')
plt.ylabel('间夜单价')
plt.savefig('H:\VS Code\酒店预订系统\酒店评分与间夜单价.png')

##4.节假日与价格相关性
# 对比统一酒店，节假日，间夜单价平均值的大小
df_holiday = df.groupby(['是否节假日', '酒店类型'], as_index=False)['间夜单价'].mean()
print('节假日与酒店类型的间夜单价均值', df_holiday.head())

plt.figure(figsize=(12, 6))
sns.barplot(x='酒店类型', y='间夜单价', hue='是否节假日', data=df_holiday)
plt.title("节假日与酒店类型的间夜单价均值对比")
plt.xlabel('酒店类型')
plt.ylabel('间夜单价')
plt.legend(title='是否节假日', loc='upper right')
plt.savefig('H:\VS Code\酒店预订系统\节假日与间夜单价对比.png')



#是否能得出“预订越早，间夜单价越低”的结论
# 分析1：预定日期与价格的整体关系（按月份）
# 提取预定月份
df["预定月份"] = df["预定日期"].dt.to_period("M").astype(str)

plt.figure(figsize=(12, 5))
sns.boxplot(
    x="预定月份", 
    y="间夜单价",
    data=df,
    palette="Blues",
    showfliers=False  # 不显示异常值
)
plt.title("不同预定月份的价格分布", fontsize=14)
plt.xlabel("预定月份", fontsize=12)
plt.ylabel("间夜单价（元）", fontsize=12)
plt.xticks(rotation=45)
plt.grid(True, linestyle="--", alpha=0.3)
plt.savefig('H:\VS Code\酒店预订系统\预定月份与间夜单价.png')

